package com.ftg.learn.bus.control_list.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ftg.learn.bus.control_list.control_list_mapper.control_list_mapper;
import com.ftg.learn.bus.control_list.control_list_pojo.control_list;
import com.ftg.learn.bus.userole_control.pojo.userole_control;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
public class control_list_service {
    @Autowired
    control_list_mapper clm;
    UUID uuid;

    /**
     * 根据角色id 查询该角色具有的菜单权限
     * @param role_id
     * @return
     */
    public List<Map<String,Object>> query(String role_id){
        return clm.query(role_id);
    }

    /**
     * 为角色 添加/修改 权限
     * @param cl
     * @return
     */
    public int insertOrUpdate(control_list cl){
        if(findOne(cl.getRole_id()) !=null || findOne(cl.getRole_id()).size() !=0 ){
            delete(cl.getRole_id());
        }
        int shu=0;
        if(cl.getControls()!=null || cl.getControls().length!=0){
            for (int i=0,j=cl.getControls().length ; i<j ; i++){
                cl.setControl(cl.getControls()[i]);
                cl.setControl_id(uuid.randomUUID().toString());
                clm.insert(cl);
                shu++;
            }
        }
        return shu;
    }

    /**
     * 根据角色id 删除对应的菜单权限
     * @param role_id
     * @return
     */
    public int delete(String role_id){
        if( findOne(role_id)== null || findOne(role_id).size()==0){
            return -1;
        }
        return clm.delete(role_id);
    }

    /**
     * 根据菜单id删除对应的角色权限
     * @param Menu_id
     * @return
     */
    public int deleteByMenu_id(String Menu_id){
        if(findOneBymenu_id(Menu_id) == null || findOneBymenu_id(Menu_id).size()==0){
            return -1;
        }
        QueryWrapper<control_list> qw=new QueryWrapper<>();
        qw.eq("control",Menu_id);
        return clm.delete(qw);
    }

    /**
     * 根绝角色id查询改角色的菜单信息
     * @param role_id
     * @return
     */
    public List findOne(String role_id){
        QueryWrapper<control_list> qw=new QueryWrapper<>();
        return clm.selectList(qw.eq("role_id",role_id));
    }

    /**
     * 根据menuid查找对应的角色权限 信息
     * @param menu_id
     * @return
     */
    public List findOneBymenu_id(String menu_id){
        QueryWrapper<control_list> qw=new QueryWrapper<>();
        return clm.selectList(qw.eq("control",menu_id));
    }

    /**
     * 根绝菜单id删除对用的角色权限
     * @param menu_ids
     * @return
     */
    public int deletesByMenu_id(List<String> menu_ids){
        if(menu_ids ==null || menu_ids.size()==0){
            return 0;
        }
        int shu=0;
        QueryWrapper<control_list> qw=new QueryWrapper<>();
        for(int i=0;i<menu_ids.size();i++){
            qw.eq("control",menu_ids.get(i));
            if(clm.delete(qw)==1){
                shu++;
            }
        }
        return shu;
    }

    /**
     * 根绝角色id删除对用的角色权限
     * @param role_ids
     * @return
     */
    public int deletesByRole_id(List<String> role_ids){
        if(role_ids ==null || role_ids.size()==0){
            return 0;
        }
        int shu=0;
        QueryWrapper<control_list> qw=new QueryWrapper<>();
        for(int i=0;i<role_ids.size();i++){
            qw.eq("role_id",role_ids.get(i));
            if(clm.delete(qw)==1){
                shu++;
            }
        }
        return shu;
    }
}
